From: Florian Müllner Date: Fri, 10 Apr 2015 11:19:23 +0000 (+0200) Subject: telepathyClient: Keep source alive while channel is open X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~1386 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=a0868bac6bd09be733f918907f5f8cb66a571a31;p=gnome-shell.git telepathyClient: Keep source alive while channel is open Sources are destroyed with their last notification. This is usually the correct behavior, however in case of chat sources, the corresponding telepathy channel might still be open, and any further messages that should trigger a notification are lost because chat sources are only created when telepathy's channel dispatcher notifies us about a channel (via ObserveChannels). Loosing messages like this is unexpected, so keep chat sources around even without notifications while the channel is open. https://bugzilla.gnome.org/show_bug.cgi?id=747636 --- diff --git a/js/ui/components/telepathyClient.js b/js/ui/components/telepathyClient.js index 061b813b4..3aa06e7b8 100644 --- a/js/ui/components/telepathyClient.js +++ b/js/ui/components/telepathyClient.js @@ -158,14 +158,6 @@ const TelepathyClient = new Lang.Class({ this._chatSources[channel.get_object_path()] = source; source.connect('destroy', Lang.bind(this, function() { - if (this._tpClient.is_handling_channel(channel)) { - // The chat box has been destroyed so it can't - // handle the channel any more. - channel.close_async(function(src, result) { - channel.close_finish(result); - }); - } - delete this._chatSources[channel.get_object_path()]; })); }, @@ -474,6 +466,18 @@ const ChatSource = new Lang.Class({ }, destroy: function(reason) { + if (this._client.is_handling_channel(this._channel)) { + // The chat box has been destroyed so it can't + // handle the channel any more. + this._channel.close_async(function(channel, result) { + channel.close_finish(result); + }); + } + + // Keep source alive while the channel is open + if (reason != MessageTray.NotificationDestroyedReason.SOURCE_CLOSED) + return; + if (this._destroyed) return;